package compiler;

import compiler.node.*;
import org.antlr.runtime.Token;
/*

    This file is part of Logica-Logike.

    Logica-Logike is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation version 3 of the License.

    Logica-Logike is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with Logica-Logike.  If not, see <http://www.gnu.org/licenses/>.

 */
public class NodeFactory {
    static Node create(Token token) {
        Node node;

        if (token == null) {
            node = new Node(null);
        } else {
            switch (token.getType()) {
                case MyLexer.VARIABLE:
                    node = new Variable(token);
                    break;
                case MyLexer.EOF:
                    node = new Program(token);
                    break;
                case MyLexer.CONJUNCION:
                    node = new Conjuncion(token);
                    break;
                case MyLexer.INCOMPATIBILIDAD:
                    node = new Incompatibilidad(token);
                    break;
                case MyLexer.DISYUNCION_INCLUSIVA:
                    node = new DisyuncionInclusiva(token);
                    break;
                case MyLexer.DISYUNCION_EXCLUSIVA:
                    node = new DisyuncionExclusiva(token);
                    break;
                case MyLexer.NEGACION_CONJUNTA:
                    node = new NegacionConjunta(token);
                    break;
                case MyLexer.BICONDICIONAL:
                    node = new Bicondicional(token);
                    break;
                case MyLexer.CONDICIONAL:
                    node = new Condicional(token);
                    break;
                case MyLexer.NEGACION:
                    node = new Negacion(token);
                    break;
                default:
                    node = new Node(token);
            }
        }
        return node;
    }
}
